/* Emacs style mode select   -*- C++ -*- */
/*-----------------------------------------------------------------------------*/

/* $Id:$*/

/* Copyright (C) 1993-1996 by id Software, Inc.*/

/* This source is available for distribution and/or modification*/
/* only under the terms of the DOOM Source Code License as*/
/* published by id Software. All rights reserved.*/

/* The source is distributed in the hope that it will be useful,*/
/* but WITHOUT ANY WARRANTY; without even the implied warranty of*/
/* FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License*/
/* for more details.*/

/* DESCRIPTION:*/
/*   All the global variables that store the internal state.*/
/*   Theoretically speaking, the internal state of the engine*/
/*    should be found by looking at the variables collected*/
/*    here, and every relevant module will have to include*/
/*    this header file.*/
/*   In practice, things are a bit messy.*/

/*-----------------------------------------------------------------------------*/


#ifndef __D_STATE__
#define __D_STATE__

/* We need globally shared data structures,*/
/*  for defining the global state variables.*/
#include "doomdata.h"
#include "d_net.h"

/* We need the playr data structure as well.*/
#include "d_player.h"


#ifdef __GNUG__
#pragma interface
#endif



/* ------------------------*/
/* Command line parameters.*/

extern  boolean	nomonsters;	/* checkparm of -nomonsters*/
extern  boolean	respawnparm;	/* checkparm of -respawn*/
extern  boolean	fastparm;	/* checkparm of -fast*/

extern  boolean	devparm;	/* DEBUG: launched with -devparm*/

/* DeHackEd */
extern	boolean	monster_infighting;	/* in p_map.c */
/* New cheats */
extern	boolean	jump_cheat;		/* in p_user.c */
extern	boolean float_cheat;		/* in p_user.c */
extern	boolean	homing_missiles;	/* in p_mobj.c */

#ifdef DIYBOOM
/* Boom extensions */
extern int compatibility;
extern int demo_compatibility;

extern int allow_pushers;
extern int default_allow_pushers;

extern int variable_friction;
extern int default_variable_friction;

extern int monsters_remember;
extern int default_monsters_remember;

extern int weapon_recoil;
extern int default_weapon_recoil;

extern int player_bobbing;
extern int default_player_bobbing;

#endif


/* -----------------------------------------------------*/
/* Game Mode - identify IWAD as shareware, retail etc.*/

extern GameMode_t	gamemode;
extern GameMission_t	gamemission;

/* Set if homebrew PWAD stuff has been added.*/
extern  boolean	modifiedgame;


/* -------------------------------------------*/
/* Language.*/
extern  Language_t   language;


/* -------------------------------------------*/
/* Selected skill type, map etc.*/


/* Defaults for menu, methinks.*/
extern  skill_t		startskill;
extern  int             startepisode;
extern	int		startmap;

extern  boolean		autostart;

/* Selected by user. */
extern  skill_t         gameskill;
extern  int		gameepisode;
extern  int		gamemap;

/* Nightmare mode flag, single player.*/
extern  boolean         respawnmonsters;

/* Netgame? Only true if >1 player.*/
extern  boolean	netgame;

/* Flag: true only if started as net deathmatch.*/
/* An enum might handle altdeath/cooperative better.*/
extern  boolean	deathmatch;

/* -------------------------*/
/* Internal parameters for sound rendering.*/
/* These have been taken from the DOS version,*/
/*  but are not (yet) supported with Linux*/
/*  (e.g. no sound volume adjustment with menu.*/

/* These are not used, but should be (menu).*/
/* From m_menu.c:*/
/*  Sound FX volume has default, 0 - 15*/
/*  Music volume has default, 0 - 15*/
/* These are multiplied by 8.*/
extern int snd_SfxVolume;      /* maximum volume for sound*/
extern int snd_MusicVolume;    /* maximum volume for music*/

/* Current music/sfx card - index useless*/
/*  w/o a reference LUT in a sound module.*/
/* Ideally, this would use indices found*/
/*  in: /usr/include/linux/soundcard.h*/
extern int snd_MusicDevice;
extern int snd_SfxDevice;
/* Config file? Same disclaimer as above.*/
extern int snd_DesiredMusicDevice;
extern int snd_DesiredSfxDevice;


/* -------------------------*/
/* Status flags for refresh.*/


/* Depending on view size - no status bar?*/
/* Note that there is no way to disable the*/
/*  status bar explicitely.*/
extern  boolean statusbaractive;

extern  boolean automapactive, mixmap;	/* In AutoMap mode?*/
extern  boolean	menuactive;	/* Menu overlayed?*/
extern  boolean	paused;		/* Game Pause?*/


extern  boolean		viewactive;

extern  boolean		nodrawers;
extern  boolean		noblit;

extern	int		viewwindowx;
extern	int		viewwindowy;






/* This one is related to the 3-screen display mode.*/
/* ANG90 = left side, ANG270 = right*/
extern  int	viewangleoffset;

/* Player taking events, and displaying.*/
extern  int	consoleplayer;
extern  int	displayplayer;


/* -------------------------------------*/
/* Scores, rating.*/
/* Statistics on a given map, for intermission.*/

extern  int	totalkills;
extern	int	totalitems;
extern	int	totalsecret;

/* Timer, for scores.*/
extern  int	levelstarttic;	/* gametic at level start*/
extern  int	leveltime;	/* tics in game play for par*/



/* --------------------------------------*/
/* DEMO playback/recording related stuff.*/
/* No demo, there is a human player in charge?*/
/* Disable save/end game?*/
extern  boolean	usergame;

/*?*/
extern  boolean	demoplayback;
extern  boolean	demorecording;

/* Quit after playing a demo from cmdline.*/
extern  boolean		singledemo;




/*?*/
extern  gamestate_t     gamestate;






/*-----------------------------*/
/* Internal parameters, fixed.*/
/* These are set by the engine, and not changed*/
/*  according to user inputs. Partly load from*/
/*  WAD, partly set at startup time.*/



extern	int		gametic;


/* Bookkeeping on players - state.*/
extern	player_t	players[MAXPLAYERS];

/* Alive? Disconnected?*/
extern  boolean		playeringame[MAXPLAYERS];


/* Player spawn spots for deathmatch.*/
#define MAX_DM_STARTS   10
extern  mapthing_t      deathmatchstarts[MAX_DM_STARTS];
extern  mapthing_t*	deathmatch_p;

/* Player spawn spots.*/
extern  mapthing_t      playerstarts[MAXPLAYERS];

/* Intermission stats.*/
/* Parameters for world map / intermission.*/
extern  wbstartstruct_t		wminfo;


/* LUT of ammunition limits for each kind.*/
/* This doubles with BackPack powerup item.*/
extern  int		maxammo[NUMAMMO];





/*-----------------------------------------*/
/* Internal parameters, used for engine.*/


/* File handling stuff.*/
extern	char		basedefault[1024];
extern  FILE*		debugfile;
/* Added this as the file to send text to after the startup screen appears */
extern  FILE*		logfile;

/* if true, load all graphics at level load*/
extern  boolean         precache;


/* wipegamestate can be set to -1*/
/*  to force a wipe on the next draw*/
extern  gamestate_t     wipegamestate;

extern  int             mouseSensitivity;
/*?*/
/* debug flag to cancel adaptiveness*/
extern  boolean         singletics;

extern  int             bodyqueslot;



/* Needed to store the number of the dummy sky flat.*/
/* Used for rendering,*/
/*  as well as tracking projectiles etc.*/
extern int		skyflatnum;



/* Netgame stuff (buffers and pointers, i.e. indices).*/

/* This is ???*/
extern  doomcom_t*	doomcom;

/* This points inside doomcom.*/
extern  doomdata_t*	netbuffer;


/*extern  ticcmd_t	localcmds[BACKUPTICS];*/
extern	int		rndindex;

extern	int		maketic;
/*extern  int		nettics[MAXNETNODES];*/

extern  ticcmd_t        netcmds[MAXPLAYERS][BACKUPTICS];
extern	int		ticdup;


/* defaults and maximum values of dynamic structures */
extern int	default_spechit;
extern int	maximum_spechit;
extern int	default_intercepts;
extern int	maximum_intercepts;
extern int	default_linespecials;
extern int	maximum_linespecials;
extern int	default_visplanes;
extern int	maximum_visplanes;
extern int	default_drawsegs;
extern int	maximum_drawsegs;
extern int	default_vissprites;
extern int	maximum_vissprites;
extern int	default_ceilings;
extern int	maximum_ceilings;
extern int	default_platforms;
extern int	maximum_platforms;

#endif
/*-----------------------------------------------------------------------------*/

/* $Log:$*/

/*-----------------------------------------------------------------------------*/
